#include <QStyleOptionGraphicsItem>
#include <QPainter>

#include "UITableViewCell.h"
#include "UITableView.h"

class UITableViewCellPrivate {
    public:
        QRectF boundingRect;

        int indentationLevel;
        int indentationWidth;

        Qt::Alignment textAlignment;
        QColor textColor;
        QString text;
};

UITableViewCell::UITableViewCell (UITableView *tableView)
    : QGraphicsItem(tableView), d(new UITableViewCellPrivate)
{
    d->indentationLevel = 0;
    d->indentationWidth = 0;

    d->textAlignment = Qt::AlignLeft | Qt::AlignVCenter;
    d->textColor = Qt::black;
}

UITableViewCell::~UITableViewCell() {
}

UITableView *UITableViewCell::tableView (void) const {
    return(static_cast<UITableView *>(parentItem()));
}

QRectF UITableViewCell::boundingRect (void) const {
    return(d->boundingRect);
}

void UITableViewCell::setBoundingRect (const QRectF& boundingRect) {
    d->boundingRect = boundingRect;
    update();
}

void UITableViewCell::setBoundingRect (qreal x, qreal y, qreal w, qreal h) {
    d->boundingRect = QRectF(x, y, w, h);
    update();
}

QString UITableViewCell::text (void) const {
    return(d->text);
}

void UITableViewCell::setText (const QString& text) {
    d->text = text;
}

QColor UITableViewCell::textColor (void) const {
    return(d->textColor);
}

void UITableViewCell::setTextColor (const QColor& color) {
    d->textColor = color;
}

Qt::Alignment UITableViewCell::textAlignment (void) const {
    return(d->textAlignment);
}

void UITableViewCell::setTextAlignment (Qt::Alignment align) {
    d->textAlignment = align;
}

int UITableViewCell::indentationLevel (void) const {
    return(d->indentationLevel);
}

void UITableViewCell::setIndentationLevel (int level) {
    d->indentationLevel = level;
}

int UITableViewCell::indentationWidth (void) const {
    return(d->indentationWidth);
}

void UITableViewCell::setIndentationWidth (int width) {
    d->indentationWidth = width;
}


void UITableViewCell::paint (QPainter *painter, 
                             const QStyleOptionGraphicsItem *option,
                             QWidget *widget)
{
    Q_UNUSED(widget)
    drawRect(painter, option->rect);
}

void UITableViewCell::drawRect (QPainter *painter, const QRect& rect) {
    painter->save();

    QRect rectArea = rect;
    rectArea.setLeft(rect.left() + d->indentationLevel * d->indentationWidth);

    painter->setPen(Qt::white);
    painter->drawRect(rectArea);

    // Draw Text
    if (!d->text.isEmpty()) {
        painter->setPen(d->textColor);
        painter->drawText(rectArea, d->textAlignment, d->text);
    }

    painter->restore();
}


